package p3.enunciado;

import java.net.Socket;

import p3.IHandler;

public class Dispatcher implements Runnable {

    Socket connHandler;
    RequestQueue reqQueue;
    Thread dispatcher;

    public Dispatcher(Socket s, RequestQueue rq) {
    }

    /**
     * Arranca el hilo del dispatcher
     */
    public void dispatch() {
    }

    /**
     * Para y (opcionalmente) elimina el hilo del dispatcher.
     */
    public void shutdown() {
    }

    /**
     * Método factoría. Devuelve un manejador en función de la petición de
     * servicio y sus parámetros.
     * Cada vez que se añada un nuevo servicio hay que actualizar este método.
     * El resto del código no se ve afectado.
     * @param request	petición de servicio.
     * @return	manejador asociado a la petición de servicio.
     */
    private IHandler getHandler(String request) {
        IHandler handler = null;
        String[] fields = request.split(",");

        if (fields == null) {
            System.out.println("Dispatcher.getHandler.request = null");
            return null;
        }
        if (fields[0].equals(Servidor.SendFile)) {
            handler = new FileHandler(fields[1], connHandler);
        }
        if (fields[0].equals(Servidor.FilterData)) {
            int data[] = new int[fields.length - 1];
            for (int i = 0; i < data.length; i++) {
                data[i] = Integer.parseInt(fields[i + 1]);
            }
            handler = new AverageHandler(data, connHandler);
        }
        return handler;
    }

    @Override
    public void run() {
        while (true) { // Sustituir true por una condición de terminación.
            String request = reqQueue.dequeueRequest();
            if (request != null) {
                // obtener handler e invocar doService.
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
